/*
* leetcode 661. 图片平滑器
*
给你图像平滑器 是大小为 3 x 3 的过滤器，用于对图像的每个单元格平滑处理，平滑处理后单元格的值为该单元格的平均灰度。
每个单元格的  平均灰度 定义为：该单元格自身及其周围的 8 个单元格的平均值，结果需向下取整。（即，需要计算蓝色平滑器中 9 个单元格的平均值）。
如果一个单元格周围存在单元格缺失的情况，则计算平均灰度时不考虑缺失的单元格（即，需要计算红色平滑器中 4 个单元格的平均值）。
/*
* */
import java.util.*;
class Solution {
    public int[][] imageSmoother(int[][] img) {
        int n=img.length,m=img[0].length;
        int[][] sum=new int[n+1][m+1];
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                sum[i][j]=img[i-1][j-1]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                int si=i-2>=0?i-2:0,sj=j-2>=0?j-2:0;
                int ei=i<n?i+1:i,ej=j<m?j+1:j;
                int s=sum[ei][ej]-sum[ei][sj]-sum[si][ej]+sum[si][sj];
                int cnt=(ei-si)*(ej-sj);
                img[i-1][j-1]=s/cnt;
            }
        }
        return img;
    }
}